package util.email;

import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * 邮箱工具类
 * @Author zt
 * @date 2021/11/17 14:15
 * @Version 1.0
 */
public class EmialUtil {
    /**
     * 发送电子邮件
     * @param smtpHost 发信主机
     *
     * @param receiver 邮件接收者
     * @param title  邮件的标题
     * @param content 邮件的内容
     * @param sender  邮件发送者
     * @param user 发送者邮箱用户名
     * @param pwd  发送者邮箱密码
     * @throws MessagingException 异常
     */
    public static void sendEmail(String smtpHost, String receiver,
                                 String title, String content, String sender, String user, String pwd) throws MessagingException
    {
        Properties props = new Properties();
        props.put("mail.host", smtpHost);
        props.put("mail.transport.protocol", "smtp");
        // props.put("mail.smtp.host",smtpHost);//发信的主机，这里要把您的域名的SMTP指向正确的邮件服务器上，这里一般不要动！
        props.put("mail.smtp.auth", "true");
        Session s = Session.getDefaultInstance(props);
        s.setDebug(true);
        MimeMessage message = new MimeMessage(s);
        // 给消息对象设置发件人/收件人/主题/发信时间
        // 发件人的邮箱
        InternetAddress from = new InternetAddress(sender);
        message.setFrom(from);
        InternetAddress to = new InternetAddress(receiver);
        message.setRecipient(Message.RecipientType.TO, to);
        message.setSubject(title);
        message.setSentDate(new Date());
        // 给消息对象设置内容
        BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象
        mdp.setContent(content, "text/html;charset=gb2312");// 给BodyPart对象设置内容和格式/编码方式防止邮件出现乱码
        Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对
        // 象(事实上可以存放多个)
        mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
        message.setContent(mm);// 把mm作为消息对象的内容

        message.saveChanges();
        Transport transport = s.getTransport("smtp");
        transport.connect(smtpHost, user, pwd);// 设置发邮件的网关，发信的帐户和密码，这里修改为您自己用的
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

    /**
     * 发送电子邮件
     * @param smtpHost 发信主机
     * @param receiver 邮件接收者
     * @param copy  抄送列表
     * @param title 邮件的标题
     * @param content 邮件的内容
     * @param sender  邮件发送者
     * @param user 发送者邮箱用户名
     * @param pwd 发送者邮箱密码
     *
     * @throws Exception 异常
     */
    public static void sendEmail(String smtpHost, String receiver, String copy,
                                 String title, String content, String sender, String user, String pwd)
            throws Exception {
        Properties props = new Properties();
        props.put("mail.host", smtpHost);
        props.put("mail.transport.protocol", "smtp");
        // props.put("mail.smtp.host",smtpHost);//发信的主机，这里要把您的域名的SMTP指向正确的邮件服务器上，这里一般不要动！
        props.put("mail.smtp.auth", "true");
        Session s = Session.getDefaultInstance(props);
        s.setDebug(true);
        MimeMessage message = new MimeMessage(s);
        // 给消息对象设置发件人/收件人/主题/发信时间
        // 发件人的邮箱
        InternetAddress from = new InternetAddress(sender);
        message.setFrom(from);
        String[] receivers = receiver.split(",");
        InternetAddress[] to = new InternetAddress[receivers.length];
        for (int i = 0; i < receivers.length; i++) {
            to[i] = new InternetAddress(receivers[i]);
        }
        message.setRecipients(Message.RecipientType.TO, to);

        String[] copys = copy.split(",");
        InternetAddress[] cc = new InternetAddress[copys.length];
        for (int i = 0; i < copys.length; i++) {
            cc[i] = new InternetAddress(copys[i]);
        }
        message.setRecipients(Message.RecipientType.CC, cc);

        message.setSubject(title);
        message.setSentDate(new Date());
        // 给消息对象设置内容
        BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象
        mdp.setContent(content, "text/html;charset=gb2312");// 给BodyPart对象设置内容和格式/编码方式防止邮件出现乱码
        Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对
        // 象(事实上可以存放多个)
        mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
        message.setContent(mm);// 把mm作为消息对象的内容

        message.saveChanges();
        Transport transport = s.getTransport("smtp");
        transport.connect(smtpHost, user, pwd);// 设置发邮件的网关，发信的帐户和密码，这里修改为您自己用的
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

}
